18. 如何训练一个会思维链(CoT)的模型

训练一个会思维链(CoT)的模型,很多人的第一反应是:

收集几十万条 <think> 数据直接训练。

实际上效果往往不好。

因为模型首先需要学会的不是推理能力,而是:

什么情况下应该输出<think>
<think>格式长什么样
<think>和最终答案如何区分

因此训练 CoT 模型通常采用:

从简单到复杂(Curriculum Learning,课程学习)


第一阶段:让模型学会 <think> 格式

刚开始不要给特别复杂的推理。

例如:

Input:
1+1=?
Output:
<think>
1+1=2
</think>

2

再例如:

Input:
中国首都是哪里?
Output:
<think>
这是一个事实性问题
中国首都是北京
</think>

北京

这里的重点不是推理。

而是:

学会输出格式

为什么不要一开始给长CoT

例如:

<think>
第一步...
第二步...
第三步...
...
1000字推理
</think>

此时模型可能连:

<think>
</think>

都还没学明白。

训练会变得不稳定。


推荐训练流程

graph TD

A[Base Model]

--> B[少量简单Think数据]

B --> C[学习Think格式]

C --> D[检查输出]

D --> E{是否正确输出Think?}

E -->|否| B

E -->|是| F[加入复杂推理数据]

F --> G[学习长CoT]

G --> H[RL优化推理]

DeepSeek-R1 实际采用的方法

很多人误以为:

DeepSeek-R1

=

直接RL

实际上并不是。

R1经历了多个阶段。


DeepSeek-R1训练总览

可以简化为:

graph LR

A[Base Model]

--> B[SFT冷启动]

--> C[Reasoning RL]

--> D[生成更多推理数据]

--> E[再次SFT]

--> F[最终RL]

--> G[DeepSeek-R1]

第一阶段:Cold Start SFT

论文发现:

直接让基础模型进入RL。

例如:

Prompt
↓
GRPO
↓
Reasoning

会出现很多问题:

因此:

先做一次 SFT。


Cold Start Data

训练数据规模:

几千条高质量CoT

数量其实不大。

重点是:

格式统一
逻辑清晰
答案正确

例如:

Question

↓

<think>

Reasoning

</think>

Answer

流程

graph LR

A[Base Model]

--> B[Cold Start CoT Data]

--> C[SFT]

--> D[获得基础推理能力]

第二阶段:GRPO强化学习

接下来进入:

DeepSeek-R1-Zero

对应论文最著名的部分。


训练方式:

问题
↓
模型生成多个答案
↓
规则验证
↓
GRPO更新

奖励主要来自:

1 正确性奖励

例如:

23+17

答案:

40

奖励:

+1

2 格式奖励

例如:

<think>
...
</think>

奖励:

+1

DeepSeek-R1-Zero

流程:

graph TD

A[Question]

--> B[生成多个回答]

B --> C[规则验证器]

C --> D[GRPO]

D --> E[R1-Zero]

R1-Zero出现的问题

论文中发现:

虽然推理能力变强。

但出现:

Language Mixing

例如:

<think>

First...

然后...

Therefore...

最后...

</think>

Readability差

推理过程很乱。


用户体验差

难以直接使用。


第三阶段:拒绝采样(Rejection Sampling)

这是R1论文一个重要创新。


让R1-Zero大量生成:

推理轨迹

例如:

Question

↓

10个回答

↓

选最好的

只保留:

正确
格式规范
逻辑清晰

的样本。


流程

graph TD

A[R1-Zero]

--> B[生成大量CoT]

B --> C[规则验证]

C --> D[DeepSeek-V3评审]

D --> E[高质量推理数据]

论文最终得到:

600k
Reasoning Samples

第四阶段:构建最终SFT数据

推理数据:

600k

非推理数据:

200k

包括:


最终:

600k + 200k
=
800k

为什么加入非推理数据

如果只训练:

<think>

模型会变成:

任何问题都开始思考

例如:

你好

模型:

<think>
用户在打招呼...
</think>

你好

非常浪费Token。


因此需要:

推理问题
→ Think

普通问题
→ 直接回答

第五阶段:最终SFT

使用:

800k

训练数据。


训练:

2 Epoch

作用:

统一模型行为。


第六阶段:最终RL

最后再进行一次RL。


这次奖励不仅包含:

推理正确性

Accuracy Reward

还包括:

人类偏好

Helpful
Harmless
Readable

最终得到:

DeepSeek-R1

DeepSeek-R1完整流程

graph TD

A[DeepSeek-V3 Base]

--> B[少量高质量CoT数据]

B --> C[SFT Cold Start]

C --> D[GRPO推理强化学习]

D --> E[R1-Zero]

E --> F[生成大量推理轨迹]

F --> G[规则验证+拒绝采样]

G --> H[600k推理数据]

I[200k非推理数据]

--> J[合并800k数据]

H --> J

J --> K[最终SFT]

K --> L[最终RL
推理+偏好奖励] L --> M[DeepSeek-R1]

对实际训练CoT模型的启发

不要一开始准备几十万条复杂 <think> 数据。

更推荐:

第一步

100~1000条简单Think

学格式。


第二步

检查是否稳定输出Think

第三步

加入复杂CoT

学习推理。


第四步

RL优化

提升推理能力。


一句话总结

DeepSeek-R1最大的经验不是“用RL学会推理”,而是先用少量高质量CoT数据教会模型输出 <think> 格式,再通过RL激发推理能力,最后利用拒绝采样生成大规模推理数据完成能力扩展。 这也是目前训练 Reasoning Model 最主流的路线。

18. 如何训练一个会思维链(CoT)的模型
第一阶段:让模型学会 格式
  • 为什么不要一开始给长CoT
  • 推荐训练流程
  • DeepSeek-R1 实际采用的方法
  • DeepSeek-R1训练总览
  • 第一阶段:Cold Start SFT
  • Cold Start Data
  • 流程
  • 第二阶段:GRPO强化学习
    1. 1 正确性奖励
    2. 2 格式奖励
  • DeepSeek-R1-Zero
  • R1-Zero出现的问题
    1. Language Mixing
    2. Readability差
    3. 用户体验差
  • 第三阶段:拒绝采样(Rejection Sampling)
  • 流程
  • 第四阶段:构建最终SFT数据
  • 为什么加入非推理数据
  • 第五阶段:最终SFT
  • 第六阶段:最终RL
    1. 推理正确性
    2. 人类偏好
  • DeepSeek-R1完整流程
  • 对实际训练CoT模型的启发
    1. 第一步
    2. 第二步
    3. 第三步
    4. 第四步
  • 一句话总结